#include "../comm.h"
class Solution {
public:
    // 用unordered_map来进行离散的记忆化
    unordered_map<int, int> dp;
    // static constexpr int N = 2e9 + 10;
    int dfs(int n)
    {
        if(n == 0 || n == 1) return n;
        if(dp.count(n)) return dp[n];
        int tt = 0x3f3f3f3f;
        int tmp2 = n / 2;
        tt = min(tt, n % 2 + 1 + dfs(tmp2));
        int tmp3 = n / 3;
        tt = min(tt, n % 3 + 1 + dfs(tmp3));
        // cout << n << ' ' << tt << endl;
        return dp[n] = tt;

    }
    int minDays(int n) {
        // 只吃掉一个桃子在任何情况都是最亏的，所以可以用记忆化搜索
        dp.clear();
        return dfs(n);
    }
};